package com.exam.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.exam.entity.ApiResult;
import com.exam.entity.ExamManage;
import com.exam.serviceimpl.ExamManageServiceImpl;
import com.exam.util.ApiResultHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/** 模块-页面：
 * 分页查询所有考试、增删改查（exam_manager表）
 */
@RestController
public class ExamManageController {

    @Autowired
    private ExamManageServiceImpl examManageService;

    /** 模块-页面：我的试卷/我的练习-“搜索试卷”按钮
     * 根据请求数据中用户输入？？为啥没有@RequestBody
     * @return
     */
    @GetMapping("/exams")
    public ApiResult findAll(){
        System.out.println("不分页查询所有试卷");
        ApiResult apiResult = ApiResultHandler.buildApiResult(200, "请求成功！", examManageService.findAll());
        return apiResult;
    }

    /**
     * 分页查询exam_manager表，查询所有
     * @param page
     * @param size
     * @return
     */
    @GetMapping("/exams/{page}/{size}")
    public ApiResult findAll(@PathVariable("page") Integer page, @PathVariable("size") Integer size){
        System.out.println("分页查询所有试卷");
        Page<ExamManage> examManage = new Page<>(page,size);
        IPage<ExamManage> all = examManageService.findAll(examManage);
        ApiResult apiResult = ApiResultHandler.buildApiResult(200, "请求成功！", all);
        return apiResult;
    }

    /** 模块-页面：考试查询-“编辑”按钮、我的试卷/我的练习-选中某张试卷、“开始答题”按钮
     * 根据examCode查询exam_manager表，返回该考试的所有记录（paperId也包含其中）。
     * @param examCode 考试编号
     * @return
     */
    @GetMapping("/exam/{examCode}")
    public ApiResult findById(@PathVariable("examCode") Integer examCode){
        System.out.println("根据ID查找");
        ExamManage res = examManageService.findById(examCode);
        if(res == null) {
            return ApiResultHandler.buildApiResult(10000,"考试编号不存在",null);
        }
        return ApiResultHandler.buildApiResult(200,"请求成功！",res);
    }

    /** 考试查询-编辑
     * 根据请求数据封装而成的考试对象，编辑考试
     * @param exammanage 封装的考试对象
     * @return
     */
    @PutMapping("/exam")
    public ApiResult update(@RequestBody ExamManage exammanage){
        int res = examManageService.update(exammanage);
//        if (res == 0) {
//            return ApiResultHandler.buildApiResult(20000,"请求参数错误");
//        }
        System.out.print("更新操作执行---");
        return ApiResultHandler.buildApiResult(200,"更新成功",res);
    }

    /** 考试查询-删除
     * 根据examCode查询exam_manager表，直接删除选中的考试
     * @param examCode 考试编号
     * @return
     */
    @DeleteMapping("/exam/{examCode}")
    public ApiResult deleteById(@PathVariable("examCode") Integer examCode){
        int res = examManageService.delete(examCode);
        return ApiResultHandler.buildApiResult(200,"删除成功",res);
    }

    /** 添加考试
     * 一场考试exam对应一张试卷paper。新增考试examCode时，试卷paperId也需自增1。
        在新增记录前，获取当前exam_manage表中最后一条记录的paperId，传给前端实现增1，赋给新增记录的paperId。
       （在DAO层将当前exam_manage表根据paperId字段将记录倒序，获取第一条记录的paperId）
     * @return
     */
    @GetMapping("/examManagePaperId")
    public ApiResult findOnlyPaperId() {
        ExamManage res = examManageService.findOnlyPaperId();
        if (res != null) {
            return ApiResultHandler.buildApiResult(200,"请求成功",res);
        }
        return ApiResultHandler.buildApiResult(400,"请求失败",res);
    }

    /** 添加考试
     * 已实现paperId的自增效果。根据封装好的请求数据在exam_manager表中新增记录。
     * @param exammanage 封装的考试对象
     * @return
     */
    @PostMapping("/exam")
    public ApiResult add(@RequestBody ExamManage exammanage){
        int res = examManageService.add(exammanage);
        if (res ==1) {
            return ApiResultHandler.buildApiResult(200, "添加成功", res);
        } else {
            return  ApiResultHandler.buildApiResult(400,"添加失败",res);
        }
    }

}
